#ifndef CURSOR_MONITOR_H
#define CURSOR_MONITOR_H

#include <X11/Xlib.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 光标状态信息结构体
 */
typedef struct {
    int x;                   ///< 光标X坐标
    int y;                   ///< 光标Y坐标
    unsigned long cursor_id; ///< 光标序列号/ID
    int width;               ///< 光标宽度
    int height;              ///< 光标高度
    int is_visible;          ///< 是否可见
} CursorStatus;

/**
 * @brief 初始化光标监控库
 * @return 成功返回Display指针，失败返回NULL
 */
Display* cursor_monitor_init(void);

/**
 * @brief 获取当前光标状态
 * @param display X11显示连接
 * @return 成功返回CursorStatus指针，失败返回NULL
 * @note 调用者需要负责释放返回的指针
 */
CursorStatus* cursor_monitor_get_status(Display* display);

/**
 * @brief 获取当前光标ID（简化版本）
 * @param display X11显示连接
 * @return 光标ID，如果获取失败返回0
 */
unsigned long cursor_monitor_get_id(Display* display);

/**
 * @brief 获取当前光标位置
 * @param display X11显示连接
 * @param x 返回X坐标的指针
 * @param y 返回Y坐标的指针
 * @return 成功返回1，失败返回0
 */
int cursor_monitor_get_position(Display* display, int* x, int* y);

/**
 * @brief 释放光标状态资源
 * @param status 要释放的光标状态指针
 */
void cursor_monitor_free_status(CursorStatus* status);

/**
 * @brief 清理库资源
 * @param display 要关闭的Display指针
 */
void cursor_monitor_cleanup(Display* display);

/**
 * @brief 检查XFixes扩展是否可用
 * @param display X11显示连接
 * @return 可用返回1，不可用返回0
 */
int cursor_monitor_xfixes_available(Display* display);

/**
 * @brief 获取库版本信息
 * @return 版本字符串
 */
const char* cursor_monitor_get_version(void);

#ifdef __cplusplus
}
#endif

#endif // CURSOR_MONITOR_H